//@author A0087294-reused
#ifndef __loggingConfigGeneralPurposeOS_h__
#define __loggingConfigGeneralPurposeOS_h__

#include "StdOutput.h"
#include "FileOutput.h"

namespace logging {
    /*!\brief The %config namespace separates the configurations of the %logging
     *        framework from the %logging namespace avoiding name clashes.
     *
     *        It contains different possible configurations for different
     *        platforms, but the configurations are not limited to the yet
     *        provided one.
     */
    namespace config {

        /*!\brief FileLogType is a possible %logging type, supporting %logging
         *        to a file on general purpose operating systems
         */
        typedef ::logging::OutputLevelSwitchDisabled <
                    ::logging::OutputStream <
                        ::logging::FileOutput
                    >
                > FileLogType;

        /*!\brief StdLogType is a possible %logging type, supporting %logging
         *        to standard output on general purpose operating systems
         */
        typedef ::logging::OutputLevelSwitchDisabled <
                    ::logging::OutputStream <
                        ::logging::StdOutput<>
                    >
                > StdLogType;

        /*!\brief StdErrLogType is a possible %logging type, supporting buffered %logging
         *        to standard error output on general purpose operating systems
         */
        typedef ::logging::OutputLevelSwitchDisabled <
                    ::logging::OutputStream <
                        ::logging::StdOutput< ::std::cerr>
                    >
                > StdErrLogType;

        /*!\brief StdLogRunTimeSwitchType is a possible %logging type,
         *        supporting %logging to standard output on general purpose
         *        operating systems with the additional feature of switching
         *        the verbosity of the %logging framework at runtime.
         */
        typedef ::logging::OutputLevelRunTimeSwitch <
                    ::logging::OutputStream <
                        ::logging::StdOutput<>
                    >
                > StdLogRunTimeSwitchType;
    }

    /*!\brief base logging type for the respective platform
     */
    typedef ::logging::config::StdLogType LoggingType;
}


#endif
